package qc.module.qms.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.common.core.exception.QCPromptException;
import qc.module.qms.dto.exchange.category.ExchangeCategoryDto;
import qc.module.qms.dto.exchange.category.ExchangeCategoryStationDto;
import qc.module.qms.dto.exchange.category.ExchangeCategoryStationSetDto;
import qc.module.qms.service.exchange.ExchangeCategoryService;

import java.util.List;

/**
 * ExchangeCategoryController
 * 数据交换数据分类
 *
 * @author QuCheng Tech
 * @since 2024/1/23
 */
@RestController
@RequestMapping("/exchcategory")
public class ExchangeCategoryController {
    
    @Autowired
    private ExchangeCategoryService service;

    /**
     * 获取所有
     *
     * @return List<ExchangeCategoryDto> 返回交换数据分类集合
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/all")
    public List<ExchangeCategoryDto> getAll(){
        return service.getAll();
    }

    /**
     * 获取指定通道ID的数据分类集合
     *
     * @param id 通道ID
     * @return List<ExchangeCategoryDto> 返回交换数据分类集合
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/channel")
    public List<ExchangeCategoryDto> getByChannelByParam(@RequestParam Integer id){
        return service.getByChannelId(id);
    }

    /**
     * 获取指定通道ID的数据分类集合
     *
     * @param id 通道ID
     * @return List<ExchangeCategoryDto> 返回交换数据分类集合
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/channel/{id}")
    public List<ExchangeCategoryDto> getByChannelByPath(@PathVariable Integer id){
        return service.getByChannelId(id);
    }

    /**
     * 获取指定
     *
     * @param id 数据分类id
     * @return ExchangeCategoryDto 返回指定交换数据分类信息
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/get")
    public ExchangeCategoryDto getByParam(@RequestParam Integer id){
        return service.get(id);
    }

    /**
     * 获取指定
     *
     * @param id 数据分类id
     * @return ExchangeCategoryDto 返回指定交换数据分类信息
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/get/{id}")
    public ExchangeCategoryDto getByPath(@PathVariable Integer id){
        return service.get(id);
    }

    /**
     * 新增
     *
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @RequestMapping(value = "/add",method = {RequestMethod.GET,RequestMethod.POST})
    public String add(@RequestBody ExchangeCategoryDto dto){
        return service.add(dto);
    }

    /**
     * 修改
     *
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @RequestMapping(value = "/update",method = {RequestMethod.POST,RequestMethod.PUT})
    public String update(@RequestBody ExchangeCategoryDto dto){
        return service.update(dto);
    }

    /**
     * 删除
     *
     * @param id 分类ID
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @DeleteMapping("/delete")
    public String deleteByParam(@RequestParam Integer id) throws QCPromptException {
        return service.delete(id);
    }

    /**
     * 删除
     *
     * @param id 分类ID
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @DeleteMapping("/delete/{id}")
    public String deleteByPath(@PathVariable Integer id) throws QCPromptException {
        return service.delete(id);
    }

    /**
     * 获取指定分类与站点的关联信息
     *
     * @param id 分类ID
     * @return List<ExchangeCategoryStationDto>
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/station")
    public List<ExchangeCategoryStationDto> getStationsByParam(@RequestParam Integer id) throws QCPromptException {
        return service.getStations(id);
    }
    /**
     * 获取指定分类与站点的关联信息
     *
     * @param id 分类ID
     * @return List<ExchangeCategoryStationDto>
     * @author QuCheng Tech
     * @since 2024/4/16
     */
    @GetMapping("/station/{id}")
    public List<ExchangeCategoryStationDto> getStationsByPath(@PathVariable Integer id) throws QCPromptException {
        return service.getStations(id);
    }

    /**
     * 设置指定分类与站点关联关系。修改交换方向
     * 
     * @param dto 请求参数对象
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/4/17
     */
    @RequestMapping(value = "/setstation",method = {RequestMethod.GET,RequestMethod.POST})
    public String setStations(@RequestBody ExchangeCategoryStationSetDto dto){
        return service.setStations(dto);
    }

    /**
     * 修改指定分类站点的交换方向
     *
     * @param dto 请求参数对象
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/4/17
     */
    @RequestMapping(value = "/setdirection",method = {RequestMethod.GET,RequestMethod.POST})
    public String setStationDirection(@RequestBody ExchangeCategoryStationSetDto dto){
        return service.setStationDirection(dto);
    }
    
}
